import { resolve } from 'path'
import { Alias, defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import dts from 'vite-plugin-dts'
import dayjs from 'dayjs';
import VitePluginMetaEnv from 'vite-plugin-meta-env'
import vueSetupExtend from 'vite-plugin-vue-setup-extend' // 设置neme属性
// import AutoImport from 'unplugin-auto-import/vite' // 自动导入
import viteCompression from 'vite-plugin-compression' // 静态资源压缩
const { name: title, version: APP_VERSION } = require('./package.json')
const metaEnv = {
  APP_VERSION,
  APP_NAME: title,
  APP_BUILD_TIME: dayjs().format('YYYY-MM-DD HH:mm:ss')
}
export default defineConfig({
  build: {
    outDir: 'lib',
    lib: {
      //1
      // entry: {
      //   'my-lib': resolve(__dirname,  './packages/index.ts'),
      //   secondary: resolve(__dirname,  './packages/index1.ts'),
      // },
      //2
      // entry: resolve(__dirname, './packages/index.ts'),
      // name: 'WebVue',
      // fileName: 'web-vue'
      //3
      // fileName: (format, entryName) => `my-lib-${entryName}.${format}.js`,
      // cssFileName: 'my-lib-style',
      //4
      entry: resolve(__dirname, './packages/index.ts'),
      name: 'wb-platform-library',
      fileName: 'wb-platform-library',
      formats: ['es', 'cjs', 'iife']
      //5
      // entry:resolve(__dirname, './packages/index.ts'),
      // formats: ['es', 'cjs']
    },
    minify: false,
    rollupOptions: {
      //1
      // external: ["vue"],
      // input: ["./packages/index.ts"],
      // output: [
      //   {
      //     //打包格式
      //     format: "es",
      //     //打包后文件名
      //     entryFileNames: "[name].mjs",
      //     //让打包目录和我们目录对应
      //     preserveModules: true,
      //     exports: "named",
      //     //配置打包根目录
      //     dir: "lib/es",
      //   },
      //   {
      //     //打包格式
      //     format: "cjs",
      //     //打包后文件名
      //     entryFileNames: "[name].js",
      //     //让打包目录和我们目录对应
      //     preserveModules: true,
      //     exports: "named",
      //     //配置打包根目录
      //     dir: "lib/lib",
      //   },
      // ],
      //2  确保外部化处理那些你不想打包进库的依赖
      external: ['vue'],
      output: {
          exports: 'named',
          // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
          globals: {
              vue: 'Vue'
          }
      }
      //3
      // external: ['vue','tinymce'],
      // output: {
      //   format: "cjs",
      //   //打包后文件名
      //   entryFileNames: "[name].js",
      //   //让打包目录和我们目录对应
      //   preserveModules: true,
      //   exports: "named",
      //   //配置打包根目录
      //   dir: "lib",
      //   // Put chunk files at <output>/chunks
      //   chunkFileNames: 'chunks/[name].[hash].js',
      //   // Put chunk styles at <output>/styles
      //   assetFileNames: 'assets/[name][extname]',
      // },
    },
  },
  resolve: {
    alias: [
      {
        find: '@',
        replacement: `${resolve(__dirname, './src')}`
      },
      {
        find: /^wb-platform-library(\/(es|lib))?$/,
        replacement: `${resolve(__dirname, './packages/index.ts')}`
      }
    ]
  },
  plugins: [
    vue(),
    dts(),
    // dts({
    //   rollupTypes: true
    // }),
    vueJsx(),
    vueSetupExtend(),
    viteCompression({
      verbose: true,
      disable: false, // 不禁用压缩
      deleteOriginFile: false, // 压缩后是否删除原文件
      threshold: 10240, // 压缩前最小文件大小
      algorithm: 'gzip', // 压缩算法
      ext: '.gz', // 文件类型
    }),
    // // vue(),
    // vue({ include: [/\.vue$/, /\.md$/] }),
    // vueJsx(),
    // dts({
    //   // merge all declarations into one file
    //   rollupTypes: true
    // }),
    // // 环境变量
    // VitePluginMetaEnv(metaEnv, 'import.meta.env'),
    // VitePluginMetaEnv(metaEnv, 'process.env')
  ],
})